package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * Created by zhj on 15-11-11.
 */
public class ProxyHandler implements InvocationHandler
{
    private Object proxied;//被代理的  即realObject

    public ProxyHandler( Object proxied )
    {
        this.proxied = proxied;
    }

    /**
     *
     * @param proxy
     * @param method  是接口的method,最终会生成一个MethodAccessor(应该是最终MethodAccessor会链接到对应的方法代码实现)的实现,传入对象和args进行调用
     * @param args
     * @return
     * @throws Throwable
     */
    public Object invoke( Object proxy, Method method, Object[] args ) throws Throwable
    {
        //在转调具体目标对象之前，可以执行一些功能处理
        System.out.println("before...");

        //转调具体目标对象的方法
        Object obj= method.invoke(proxied, args);

        //在转调具体目标对象之后，可以执行一些功能处理
        System.out.println("after...");

        return obj;
    }
}
